# coding:utf-8
import time
import uuid

# 截取指定位置的图片,并保存到指定路径
# left, top     -- 左上角坐标
# right, bottom -- 右下角坐标
# filepath      -- 图片保存路径
def __grab_image(left, top, right, bottom, filepath):
  # PIL模块(截图)
  from PIL import ImageGrab
  # 利用PIL模块截图
  img = ImageGrab.grab(bbox=(left, top, right, bottom))
  # pyautogui截图内部使用的也是PIL模块
  # img = pyautogui.screenshot(region=(left, top, right, bottom))
  # 显示
  # img.show()
  # 保存
  # https://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html
  # quality -- 图片的质量（1最差，95最好）
  # compress_level -- 压缩(0不压缩, 9最高压缩)
  # dpi -- 分辨率(元组,表示宽和高的分辨率),默认72,本地图片一般是300,印刷图片至少720
  
  # 默认optimize=True, dpi=72, quality=75
  # img.save(filepath)

  # 如果optimize=True,compress_level默认等于6
  img.save(filepath, 'PNG', dpi=(300,300), optimize=True, compress_level=0, quality=95)
  
  # 不优化不压缩(图片尺寸较大,但效果与优化的没太大区别)
  # img.save(filepath, 'PNG', dpi=(300,300), optimize=False, compress_level=0, quality=95)


# 执行自动化工作: 点击巷道, 截图, 然后删除巷道
# x, y          -- 点击位置
# left, top     -- 左上角坐标
# right, bottom -- 右下角坐标
# filepath      -- 图片保存路径
def __auto_gui_work(x, y, left, top, right, bottom, filepath):
  # pyautogui模块(执行GUI自动化操作)
  import pyautogui
  # 点击巷道
  pyautogui.click(x, y)
  # 展开坐标
  pyautogui.click(left+1, top+1)
  # TODO 延迟点时间,减少出现空白图的情况
  time.sleep(0.5)
  # 截图并保存
  __grab_image(left, top, right, bottom, filepath)

  # TODO 再次选中巷道
  # issue 展开坐标的click会导致窗口焦点转移, 而巷道仍处于选中状态, 再次点击巷道会取消选中状态!
  # 巷道取消选中
  pyautogui.click(x, y)
  # 重复快速点击会被是一个click, 加一点延时
  time.sleep(0.5)
  # 巷道再次选中
  pyautogui.click(x, y)

  # 删除和回车
  pyautogui.press('delete')
  pyautogui.press('enter')

# 根据记录的坐标执行自动化工作
def AutoGuiWork(mouse_click_points, size, out_dir):
  # 截图并删除巷道
  left, top, right, bottom = size
  for i, pt in enumerate(mouse_click_points):
    x, y = pt
    print('点击:', x, y)
    # 生成一个随机字符串
    # image_file = out_dir + '\\' + uuid.uuid4().hex + '.png'
    image_file = out_dir + '\\' + str(i+1) + '.png'
    __auto_gui_work(x, y, left, top, right, bottom, image_file)
    print('截取图片:', image_file)
